﻿namespace OasisCiq.Xpil
{
    using System.Collections.Specialized;
    using CommonTypes;
    using External;
    using XS;

    /// <summary>
    /// Container for person specific details that are not 
    /// covered in this schema that is common to a party
    /// </summary>
    public class PersonInfo : IDataQualityGroup, IExtendedAttributes
    {
        /// <summary>
        /// Age of the person as integer
        /// </summary>
        public virtual CTString Age { get; set; }

        /// <summary>
        /// Type of category the person belongs such as 
        /// customer, employee, friend, prospect, etc
        /// </summary>
        public virtual PersonCategoryTypeList CategoryType { get; set; }

        /// <summary>
        /// Status of the person. e.g. living, deceased, retired. To log the 
        /// date of the status such as death or retired, use "Events" element
        /// </summary>
        public virtual PhysicalStatusList PhysicalStatus { get; set; }

        /// <summary>
        /// Free text description of the current marital status, 
        /// e.g. married, separated, divorced, separated, etc.
        /// </summary>
        public virtual MaritalStatusList MaritalStatus { get; set; }

        /// <summary>
        /// Ethnicity of the person, e.g. Asian, Chinese, African, etc.
        /// </summary>
        public virtual PersonEthnicityList Ethnicity { get; set; }

        /// <summary>
        /// Free text gender description.
        /// </summary>
        public virtual GenderList Gender { get; set; }

        /// <summary>
        /// Free text name of the religion
        /// </summary>
        public virtual ReligionList Religion { get; set; }

        /// <summary>
        /// This attribute indicates what level of trust can be given to the parent element.
        /// Omit this attribute if the data quality is unknown. If the data quality is known,
        /// the value is "Valid, else "InValid"
        /// </summary>
        public virtual DataQualityTypeList DataQualityType { get; set; }

        /// <summary>
        /// Date the data quality is valid from
        /// </summary>
        public virtual XSDateTime ValidFrom { get; set; }

        /// <summary>
        /// Date the data quality is valid to
        /// </summary>
        public virtual XSDateTime ValidTo { get; set; }

        public virtual NameValueCollection ExtendedAttributes { get; set; }
    }
}
